Weboldal JAVA Spring Boot alapokon - 3
Az előző részben létrehoztuk az adatbázis táblákat, bele is pakoltunk pár teszt adatot, illetve JAVA oldalon az adattábláknak megfelelő JAVA osztályokat is létrehoztuk.
Ezúttal a Repository réteggel folytatjuk, itt hozzuk létre azokat az JPA parancsokat, ahol szükséges SQL utasításokat, amelyek egyik oldalról az SQL adatbázisból kérdezik le az adatokat, másik oldalról pedig továbbadjuk a következő réteg felé. GitHub-on megtalálhatóak a létrehozott osztályok:
StoryRepository: a Story adattáblához kapcsolódunk, azaz a weboldal bejegyzéseire készítünk el különböző lekérdezéseket. Fontos, hogy @Repository annotációval jelezzük, hogy a Repository réteghez tartozik. Létrehozása során kiterjesztjük a CrudRepository interface-t, amely CRUD funkcionalitásokat tesz lehetővé számunkra (CRUD = create, read, update, delete). Mivel a Spring Boot lényege pont az, hogy előttünk már megírták a főbb eljárásokat (így a CRUD utasításokat is), nekünk a megírásával már nem kell törődni, egyszerűen csak kiterjesztjük a saját kódunkban, ha kell felülírjuk, vagy csak simán felhasználjuk. Ezzel rengeteg időt tudunk megtakarítani magunknak, és az üzleti logika megvalósítására tudunk koncentrálni.
Ha megnézzük a kódot, akkor látjuk, hogy JPA használatával nagyon egyszerűek a lekérdezések az adatbázisból: a List
Van lehetőség arra is, hogy magunknak definiáljunk SQL lekérdezéseket:
@Query(value = "SELECT s FROM Story s WHERE s.title = ?1")Itt a @Query annotációval jelezzük, hogy egy SQL lekérdezést fogunk futtatni, ahol a ?1 nem más, mint a findByTitle-ként (vagy akármilyen nekünk tetsző néven) elnevezett metódusunk "title" paramétere, amelyet majd a következő, Service rétegen keresztül kapunk meg, és ez alapján kérdezünk le az adatbázisból (pl. ha a "JAVA" címet viselő cikket akarjuk lekérdezni és megjeleníteni weboldalunkon, akkor a "JAVA" Stringet adjuk át a findByTitle számára).
Story findByTitle(@Param("title") String title);
UserRepository: a User táblához kapcsolódunk, hasonló elvek szerint, mint a StoryRepository esetében. Itt a findByEmail JPA lekérdezéssel értelemszerűen a metódus számára, a Service réteg felől átadott email cím alapján keressük meg az adott felhasználót az adattáblában. Az így megkapott User objektum alapján a kapcsolódó Role lesz visszakereshető, de erről majd bővebben a Security rétegnél lesz szó.
RoleRepository: a Role táblához kapcsolódunk, jelen esetben ugyan nincsen külön lekérdezés az adattáblából, de ha szükséges valamilyen lekérdezés onnan, akkor itt megtehetjük.
Az így lekérdezett adatokat pedig szépen továbbadjuk a Service rétegnek, amely az adatbázis felől megkapott adatok üzleti logika szerinti feldolgozását teszi lehetővé. Itt folytatjuk a következő részben.